#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QHBoxLayout>

#include "widget/timeShowWidget/timewidget.h"
#include "widget/ScrollingMessageDisplay/scrollingmessagedisplaywidget.h"
#include "widget/VolumeLimiter/volumelimiterwidget.h"
#include "widget/CentreGateway/centregatewaywidget.h"
#include "widget/RealData/realdatawidget.h"
#include "widget/RemoteControl/remotecontrolwidget.h"
#include "widget/HistoryControlDataWidget/historycontroldatawidget.h"
#include "widget/HistoryDataWidget/historydatawidget.h"
#include "widget/LockSystem/lockfullscreenwidget.h"
#include "widget/LockSystem/locksystemdialog.h"
#include "widget/setPa/setpawidget.h"

#include "tools/audio/audio.h"

class QPushButton;

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
    
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
public slots:
    /**
     * @brief slt_printInfo 在滚动栏打印消息
     * @param info
     */
    void slt_printInfo(const QString &info);


    void showWindow();//简单的对show()进行的再封装，是为了方便测试，可以去除，但是main函数中的相应槽要换成show
    /*
     *param: adress 那个节点 value 传感器数据
     *
     *
     */
    void slt_sensorData(const QString &adress, int value);
    /**
     * @brief sig_sensorData 发送给view层显示传感器实时数据
     * @param name 设备名
     * @param value 数值
     */
    void slt_sensorData(ushort name, int flag, int value);
    /*
     *param: value 使用一种特殊的格式描述网络结构 例如XML格式，通过解析这段数据来建立网络视图，
     *Note: 与维护网络结构的NodeTopology类型的对象相链接，不是用了
     */
    void slt_netTopology(const QString &value);
    /**
     * @brief slt_getGSMinfo 获得ZIGBEE设备的状态
     * @param fileName 名
     * @param onOff 状态
     */

    void slt_getZigBeeInfo(const QString &fileName,bool onOff);
    /**
     * @brief slt_getGSMinfo 获得gsm设备的状态
     * @param fileName 名
     * @param onOff 状态
     */
    void slt_getGSMinfo(const QString &fileName,bool onOff);

    /**
     * @brief slt_setListItems 添加列表的信息
     * @param adress  地址
     * @param name 设备名
     * @param value 值
     * @param flag 数据标识
     */
    void slt_setListItems(const QString& adress, int name, int value, int flag);

    /**
     * @brief slt_newNode 新节点
     * @param n
     */
    void slt_newNode(const Node &n);
    /**
     * @brief slt_oldNode 重新加入网络的节点
     * @param n
     */
   // void slt_oldNode(const Node &n);
    /**
     * @brief slt_nodeChange 对外接口， 现在只供tree图使用
     * @param name 设备名
     * @param states 状态
     */
    //void slt_nodeChange(ushort name, bool states);
    void slt_ChangNodeState(const Node &n);

    void slt_ChangNodeState(int type,const QString &addr,const QString &paddr,
                            ushort _name,bool status);


//    void slt_updataNodeValue(ushort name,int value);
signals:


#ifdef TEST_NET
    void sig_show();
#endif

    /**
     * @brief sig_activatedZIgBee 询问zigbee设备现在的状态
     * @param name 设备名
     */
    void sig_activatedZIgBee(const QString &name);
    /**
     * @brief sig_activatedGSM 询问GSM设备现在的状态
     * @param name 设备名
     */
    void sig_activatedGSM(const QString &name);
    /**
     * @brief sig_setZigBeeWorkStatus 改变zigbee设备的状态
     * @param name 设备名
     * @param onOff 状态
     */
    void sig_setZigBeeWorkStatus(const QString &name, const bool &onOff);
    /**
     * @brief sig_setGSMworkStatus  改变GSM设备的状态
     * @param name 设备名
     * @param onOff 状态
     */
    void sig_setGSMworkStatus(const QString &name, const bool &onOff);//设置GSM相关设备的工作状态


    void sig_aFilter(const Filter &f);


    void sig_sendMessage(const Message &me);
protected:
protected slots:
    /*******************
      与中心网关窗口信号连接的槽
      *******************/
    void quitSys();//退出系统
    void lockSys();//锁定系统
    void rebootSys();//重启系统



private:
    Ui::MainWindow *ui;
    TimeWidget *time;//时钟
    ScrollingMessageDisplayWidget *scrollingMessageDisplay;//信息滚动条窗口
    VolumeLimiterWidget *volumeLimiter;//音量控制部件窗口
    QPushButton *lockButton;//锁定系统的按钮

    CentreGatewayWidget *centreGateway;//中心网关窗口
    RealDataWidget *realData;
    HistoryDataWidget *historyData;
    RemoteControlWidget *remoteControl;
    HistoryControlDataWidget *historyControlData;



    void initUI();
    void createStatusBar();//向StatusBar中添加相关的widget小部件
    void createCentreGatewayWidget();
    void createZigBeeWidget();
    void createRemoteControlWidget();
    void createHistoryControlData();

    void createSetPaWidget();

    void connects();

    void writeFile();

};

#endif // MAINWINDOW_H
